package modules.pathloss.model;

import tools.settings.Settings;

import datatypes.Antenna;
import tools.settings.SettingsMissingException;

/**
 * <p>
 * Interface for the path loss models.
 * </p>
 *
 * @author Lynne Vandousselaere
 */
public interface PathLossModel {
    // The speed of light in a vacuum (m/s)
    int c = (3 * 10 ^ 8);

    /**
     * <p>
     * Given all other parameters, retrieve the parameters in the following
     * format: a + b.distance where an array {a,b} is returned. Distance is
     * in km.
     * </p>
     *
     * @param techParam
     *      the needed technology, with specific settings.
     * @param a
     *      the needed antenna, with specific settings.
     * @return
     *      a float array {a,b} which represents the formule a+(b*distance).
     * @throws javax.naming.directory.InvalidAttributesException
     *      if the TechSettings lack needed information.
     */
    double[] getLogDistance(Settings settings, Antenna a) throws SettingsMissingException;

    /**
     * 
     * @param settings
     * @param a
     * @param distance, given in m (meter).
     * @return
     * @throws tools.settings.SettingsMissingException
     */
    double getPathLoss(Settings settings, Antenna a, double distance) throws SettingsMissingException;

    /**
     * 
     * @return
     */
    String[] getRequiredSettingNames();
}
